// 假设 getBread, sliceBread, spreadJam 函数都如上所示，返回 Promise
function getBread() {
  return new Promise(resolve => {
    setTimeout(() => {
      console.log('1. 面包已拿到');
      resolve('新鲜的面包');
    }, 1000);
  });
}

function sliceBread(bread) {
  return new Promise(resolve => {
    setTimeout(() => {
      console.log(`2. 正在切 ${bread}`);
      resolve('切好的面包片');
    }, 1000);
  });
}

function spreadJam(slicedBread) {
  return new Promise(resolve => {
    setTimeout(() => {
      console.log(`3. 正在 ${slicedBread} 上涂果酱`);
      resolve('美味的三明治完成了！');
    }, 1000);
  });
}
async function makeSandwich() {
  try {
    console.log('开始制作三明治...');
    // await 关键字会“等待” getBread() 的 Promise 完成，然后将结果赋值给 bread 变量
    const bread = await getBread();
    
    // 等待 sliceBread() 的 Promise 完成
    const slicedBread = await sliceBread(bread);
    
    // 等待 spreadJam() 的 Promise 完成
    const finalSandwich = await spreadJam(slicedBread);
    
    console.log(finalSandwich);
  } catch (error) {
    // try-catch 块用来捕获 await 抛出的错误
    console.error('制作过程中出错:', error);
  }
}

makeSandwich();
